import csv
import os
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import sys


# 输入文件名和输出文件名
input_file = sys.argv[1]
#input_file = "20250301T210000"
output_file = "temp.csv"

# 检查输入文件是否存在
if not os.path.exists(input_file):
    print(f"文件 {input_file} 不存在，请检查路径！")
    exit()

try:
    # 打开原始文件，将内容中的 tab 替换为英文逗号，并保存为新的 CSV 文件
    with open(input_file, "r", encoding="utf-8") as infile, open(output_file, "w", encoding="utf-8", newline="") as outfile:
        reader = csv.reader(infile, delimiter="\t")
        writer = csv.writer(outfile)
        for row in reader:
            writer.writerow(row)

    print(f"文件已成功转换并保存为 {output_file}")

    # 分析生成的 CSV 文件，按第五列（设备名称）统计结果
    device_names = []
    ignored_devices = {"小米通用协议", "DoT","HTTPS","SSL","DoH"}  # 定义需要忽略的设备名称集合
    with open(output_file, "r", encoding="utf-8") as infile:
        reader = csv.reader(infile)
        next(reader)  # 跳过标题行（如果有）
        for row in reader:
            if len(row) >= 5:  # 确保行有足够多的列
                #device_name=row[0]  # ip
                #if device_name not in ignored_devices:  # 如果设备名称不在忽略列表中
                    #device_names.append(device_name)  # 添加到设备名称列表
                #device_name=row[3]  # date
                device_name=row[4]  # web
                if device_name not in ignored_devices:  # 如果设备名称不在忽略列表中
                    device_names.append(device_name)  # 添加到设备名称列表
                #device_name=row[5]  # 设备名称
                #if device_name not in ignored_devices:  # 如果设备名称不在忽略列表中
                    #device_names.append(device_name)  # 添加到设备名称列表
                #device_name=row[7]  # url
                #if device_name not in ignored_devices:  # 如果设备名称不在忽略列表中
                    #device_names.append(device_name)  # 添加到设备名称列表
                

    # 统计设备名称的出现频率
    device_counts = Counter(device_names)

    # 设置中文字体（确保支持中文显示）
    font_path = "simhei.ttf"  # 黑体字体路径，可根据实际情况调整
    if not os.path.exists(font_path):
        print(f"字体文件 {font_path} 未找到，请确保字体文件存在！")
        exit()

    # 生成词云
    wordcloud = WordCloud(
        font_path=font_path,  # 指定中文字体
        width=1920,
        height=1080,
        background_color="white"
    ).generate_from_frequencies(device_counts)

    # 显示词云
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.title(input_file[-15:-4]+"词云", fontsize=16)

    # 设置 Matplotlib 的中文字体
    plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置中文字体为黑体
    plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

    plt.show()

except Exception as e:
    print(f"发生错误：{e}")
